package com.example.service;

import com.example.common.JwtTokenUtils;
import com.example.dao.AdminDao;
import com.example.entity.Admin;
import com.example.entity.Params;
import com.example.exception.CustomException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class AdminService {
    @Resource
    private AdminDao adminDao;

    public List<Admin> findAll() {
        return adminDao.selectAll();
    }

    public PageInfo<Admin> findBySearch(Params params) {
        //开启分页
        PageHelper.startPage(params.getPageNum(), params.getPageSize());
        //接下来的查询会自动按照当前开启的分页设置来查询
        List<Admin> list=adminDao.findBySearch(params);
        return PageInfo.of(list);
    }

    public void add(Admin admin) {
        //1、用户名一定要有，否则不让新增（后面登录需要用户名）
        if(admin.getName()==null || "".equals(admin.getName())){
            throw new CustomException("用户名不能为空");
        }
        //2、管理员名字一样不允许重复添加，根据用户名去数据库去查询
        Admin user =adminDao.findName(admin.getName());
        if (user != null){
            throw new CustomException("该用户名已存在，请更换用户名");
        }
        if (admin.getPassword() == null) {
            admin.setPassword("123456");
        }
        adminDao.insertSelective(admin);
    }

    public void update(Admin admin) {
        adminDao.updateByPrimaryKeySelective(admin);
    }

    public void delete(Integer id) {
        adminDao.deleteByPrimaryKey(id);
    }

    public Admin login(Admin admin) {
        //1、进行非空判断
        if(admin.getName()==null || "".equals(admin.getName())){
            throw new CustomException("用户名不能为空");
        }
        if(admin.getPassword()==null || "".equals(admin.getPassword())){
            throw new CustomException("密码不能为空");
        }
        //2、从数据库里面根据这个用户名密码查询对应的管理员信息，
        Admin user =adminDao.findByNameAndPassword(admin.getName(),admin.getPassword());
        if (user == null){
            //如果查出来没有，那说明输入的用户名密码有误，提示用户不允许登录
            throw new CustomException("用户名或密码输入错误");
        }
        //如果查出来了有，那说明有这个管理员，而且输入的用户名密码正确
        //生成登录用户对应的token，然后跟着user一期返回前台
        String token= JwtTokenUtils.genToken(user.getId().toString(),user.getPassword());
        user.setToken(token);
        return user;
    }

    public Admin findById(Integer id) {
        return adminDao.selectByPrimaryKey(id);
    }


}

